#ifndef _SE_APPLICATION_
#define _SE_APPLICATION_

#include "Core/ApplicationContext.h"

namespace SE
{
    class Application
    {
    protected:
        ApplicationContext mContext;

    public:
        Application() = default;
        virtual ~Application() = default;

        void start();
        void run();
        void shutdown();
        void onEvent(Event& event);

        void pushLayer(const Ref<Layer>& layer);

    protected:
        void tickOneFrame(const Double deltaMilliseconds);
    };

    Application* CreateApplication();
} // !namespace SE

#endif // !_SE_APPLICATION_